// 优化3：使用类来创建
class Box {
  constructor(value) {
    this.value = value;
  }
  getValue() { // 在 Box.prototype 上创建方法
    return this.value;
  }
}

// 所有构造函数 是 Function new 出来的
// 构造函数：Box, Object, Function, Array, String, Number
Object.getPrototypeOf(Box) === Box.__proto__
Box.__proto__ === Function.prototype
Object.__proto__ === Function.prototype
Function.__proto__ === Function.prototype
Array.__proto__ === Function.prototype
String.__proto__ === Function.prototype
Number.__proto__ === Function.prototype


// 所有原型对象 是 Object new出来的(除了Object.prototype)
// 原型对象: Function.prototype, Array.prototype, String.prototype, Number.prototype, Box.__proto__, (new Box()).__proto__
Function.prototype.__proto__ === Object.prototype
Array.prototype.__proto__ === Object.prototype
String.prototype.__proto__ === Object.prototype
Number.prototype.__proto__ === Object.prototype
Box.__proto__.__proto__ === Object.prototype
(new Box()).__proto__.__proto__ === Object.prototype


// Object.prototype不能被new出来，访问原型(__proto__)为null
Object.prototype.__proto__ === null // Object的原型找1次__proto__
Function.prototype.__proto__.__proto__ === null // 构造函数原型找2次__proto__
Function.__proto__.__proto__.__proto__ === null // 构造函数找3次__proto__ 
(new Box()).__proto__.__proto__.__proto__ === null // 实例找3次__proto__ 
